package com.egao.gps.dao.impl;

import com.egao.common.core.damon.results.MongoBaseDao;
import com.egao.common.core.damon.results.PageResult2;
import com.egao.common.core.damon.utils.Utils;
import com.egao.common.core.web.JsonResult;
import com.egao.gps.dao.AllTempsDao;
import com.egao.gps.entity.AllTemps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author Damon
 * @create 2020-11-17 13:44
 */
@Repository
public class AllTempsDaoImpl extends MongoBaseDao implements AllTempsDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public JsonResult listPage(PageResult2 page, AllTemps allTemps) {

       /* Criteria criteriafrom = new Criteria().andOperator(
                Criteria.where("from.id").is(11),
                Criteria.where("from.to").is(22)
        );
        Criteria criteriato = new Criteria().andOperator(
                Criteria.where("from.id").is(22),
                Criteria.where("from.to").is(11)
        );
        Criteria criteria = new Criteria().orOperator(criteriafrom,criteriato);
        PageRequest pageRequest = PageRequest.of((page.getPage()-1)*page.getLimit(), page.getLimit(), Sort.Direction.ASC, "date");

        Query query2 = new Query(criteria).with(pageRequest);

        List<AllTemps> list =  this.mongoTemplate.find(query2, AllTemps.class);
*/
        Query query = new Query();
        if (Utils.isNotEmpty(allTemps)) {
//            if(Utils.isNotEmpty(allTemps.getVno())) {
//                query.addCriteria(Criteria.where("vno").is(allTemps.getVno())); //gte: 大于等于
//            }
        }
        long count =  this.mongoTemplate.count(query, AllTemps.class);
        page.setCount(count);

        query.skip((page.getPage()-1)*page.getLimit()).limit(page.getLimit());
        List<AllTemps> list =  this.mongoTemplate.find(query, AllTemps.class);
        page.setData(list);


        return jsonResult(page);
    }

    @Override
    public List<AllTemps> list(AllTemps allTemps) {
        Query query = new Query();
        if (Utils.isNotEmpty(allTemps)) {
            if(Utils.isNotEmpty(allTemps.getType())) {
                query.addCriteria(Criteria.where("type").is(allTemps.getType())); //gte: 大于等于
            }
//            if(Utils.isNotEmpty(allTemps.getDate1()) && Utils.isNotEmpty(allTemps.getDate2())) {
//                query.addCriteria(Criteria.where("utc").gte(allTemps.getDate1()).lte(allTemps.getDate2())); //: 大于等于 小于等于
//            } else if(Utils.isNotEmpty(allTemps.getDate1())) {
//                query.addCriteria(Criteria.where("utc").gte(allTemps.getDate1())); //gte: 大于等于
//            } else if(Utils.isNotEmpty(allTemps.getDate2())) {
//                query.addCriteria(Criteria.where("utc").lte(allTemps.getDate2())); //lte: 小于等于
//            }
//            if(Utils.isNotEmpty(allTemps.getBillId())) {
//                query.addCriteria(Criteria.where("billId").is(allTemps.getBillId())); //gte: 大于等于
//            }
        }
        List<AllTemps> list =  this.mongoTemplate.find(query, AllTemps.class);
        return list;
    }


    @Override
    public AllTemps findByBillId(AllTemps allTemps) {
        Query query = new Query();
        query.addCriteria(Criteria.where("billId").is(allTemps.getBillId()));
        query.addCriteria(Criteria.where("type").is(allTemps.getType()));
        return this.mongoTemplate.findOne(query, AllTemps.class);
    }


    @Override
    public Boolean save(AllTemps allTemps) {
        this.mongoTemplate.save(allTemps);
        return null;
    }

    @Override
    public Boolean saveBatch(List<AllTemps> allTempsList) {
        this.mongoTemplate.insertAll(allTempsList);
        return null;
    }

    @Override
    public Boolean update(AllTemps allTemps) {
        Query query = new Query();
        query.addCriteria(Criteria.where("type").is(allTemps.getType()));
        query.addCriteria(Criteria.where("billId").is(allTemps.getBillId()));
        Update update = new Update();
        update.set("createDate", allTemps.getCreateDate());
        this.mongoTemplate.updateFirst(query, update, AllTemps.class);
        return null;
    }

    @Override
    public Boolean removeByBillId(AllTemps allTemps) {
        Query query = new Query();
        query.addCriteria(Criteria.where("type").is(allTemps.getType()));
        query.addCriteria(Criteria.where("billId").is(allTemps.getBillId()));
        this.mongoTemplate.remove(query,AllTemps.class);
        return null;
    }

}
